package com.bzkj.document.service.whstransbill;

import com.bzkj.common.core.domain.AjaxResult;
import com.bzkj.common.core.domain.model.LoginUser;
import com.bzkj.common.core.page.TableDataInfo;
import com.bzkj.common.domain.NccRequestDTO;
import com.bzkj.document.domain.DocConfirmDTO;
import com.bzkj.document.domain.whstransbill.dto.WhsTransBillRequestBody;
import com.bzkj.document.domain.whstransbill.dto.WhsTransQueryDTO;

import java.util.HashMap;

/**
 * @projectName: prt-wms
 * @package: com.bzkj.document.service.whstransbill
 * @className: WhstransbillService
 * @description: 转库出库服务层接口
 * @author: C1309
 * @createDate: 2024年12月11日
 * @version: v1.0
 */
public interface WhstransbillService {

    /**
     * 新增NCC转库单
     *
     * @param whsTransBillRequestBody 转库单数据
     * @return 操作结果
     */
    AjaxResult addTransferOrders(WhsTransBillRequestBody whsTransBillRequestBody);

    /**
     * NCC转库单签字
     *
     * @param vbillcode    单据头
     * @param loginUser 登录用户
     * @return 操作结果
     */
    AjaxResult signatureWhsTransOutBound(String vbillcode, LoginUser loginUser);

    /**
     * 修改转库出库单据
     *
     * @param responseBody 修改数据
     * @param loginUser    登录用户
     * @param isSign       是否跳过校验
     * @return 修改结果
     */
    AjaxResult updateWhsTransBoundOrder(HashMap<String, Object> responseBody, LoginUser loginUser, boolean isSign);

    /**
     * 查询转库出库单据
     *
     * @param nccRequestDTO 查询条件
     * @return 查询结果
     */
    TableDataInfo selectNccTransferOrders(NccRequestDTO nccRequestDTO);

    /**
     * 本地查询转库出库单据
     *
     * @param whsTransQueryDTO 查询条件
     * @param pageNum          当前页
     * @param pageSize         页大小
     * @return 查询结果
     */
    TableDataInfo selectLocalTransferOrders(WhsTransQueryDTO whsTransQueryDTO, int pageNum, int pageSize);

    /**
     * 确认转库出库单据
     *
     * @param requestBody 确认数据
     * @return 确认结果
     */
    AjaxResult confirmNccTransBill(DocConfirmDTO requestBody);

    /**
     * 转库单撤回至未收货状态
     * @param headerId 表头主键
     * @param loginUser 登录用户
     * @return 操作结果
     */
    AjaxResult orderBack(String headerId, LoginUser loginUser);

    /**
     * 更新库存
     * @param headerId 表头主键
     * @param loginUser 登录用户
     * @return 操作结果
     */
    AjaxResult updateInventory(String headerId, LoginUser loginUser);

    /**
     * 删除转库单
     * @param headerId 表头主键
     * @param reason 删除原因
     * @param loginUser 登录用户
     * @return 操作结果
     */
    AjaxResult deleteTransferOrders(String headerId, String reason, LoginUser loginUser);
}
